<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 给你一个整数数组 arr， 请你将数组中的每个元素替换为它们排序后的序号。

    // 序号代表了一个元素有多大。 序号编号的规则如下：

    // 序号从 1 开始编号。
    // 一个元素越大， 那么序号越大。 如果两个元素相等， 那么它们的序号相同。
    // 每个数字的序号都应该尽可能地小。

    /**
     * @param {number[]} arr
     * @return {number[]}
     */
    var arrayRankTransform = function (arr) {
      let temp = [...arr];
      let res = []
      let map = {}
      arr = [...new Set(arr)];
      arr = arr.sort((a, b) => a - b)
      for (let i = arr.length-1; i >=0; i--) {
        map[arr[i]] = i+1
      }

      for (let i = 0; i < temp.length; i++) {
        res.push(map[temp[i]])
      }

      return res
    };

    console.log(arrayRankTransform([37, 12, 28, 9, 100, 56, 80, 5, 12]));
  </script>
</body>

</html>